/**
 * <pre>
 * Title: 		InputPattern.java
 * Author:		linriqing
 * Create:	 	2010-6-8 上午11:04:30
 * Copyright: 	Copyright (c) 2010
 * Company:		Shenzhen Helper
 * <pre>
 */
package com.hengpeng.common.web.annotation;

/**
 * <pre>
 * Html控件格式校验类型枚举
 * </pre>
 * @author linriqing
 * @version 1.0, 2010-6-8
 */
public enum HtmlInputPattern
{
	/**
	 * 匹配中文字符 中文字符
	 */
	CHINESE("^[\\u4e00-\\u9fa5]*$", "中文字符"),
	/**
	 * 非负整数货币（非负数） 大于0的小数，示例：1.01
	 */
	CURRENCY("^[0-9]+(\\.[0-9][0-9])?$", "大于0的小数，示例：1.01"),

	/**
	 * 匹配日期 日期，示例：2010-06-08
	 */
	DATE("^[1-9][0-9]{3}-(0?[1-9]|1[0|1|2])-(0?[1-9]|[1|2][0-9]|3[0|1])", "日期，示例：2010-06-08"),
	/**
	 * 匹配日期时间 示例：2010-06-08 13:13
	 */
	DATETIME(
			"^[1-9][0-9]{3}-(0?[1-9]|1[0|1|2])-(0?[1-9]|[1|2][0-9]|3[0|1])\\s(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1|2|3|4|5][0-9])$",
			"日期时间，示例：2010-06-08 13:13"),
	/**
	 * 匹配日期时间 示例：2010-06-08 13:13:13
	 */
	DATETIMESS(
			"^[1-9][0-9]{3}-(0?[1-9]|1[0|1|2])-(0?[1-9]|[1|2][0-9]|3[0|1])\\s(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1|2|3|4|5][0-9]):(0?[0-9]|[1|2|3|4|5][0-9])$",
			"日期时间，示例：2010-06-08 13:13:13"),
	/**
	 * 匹配Email地址 \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
	 */
	EMAIL("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", "电子邮件地址，示例：test@gmail.com"),
	/**
	 * 浮点数 大于0的小数，实例1.234
	 */
	FLOAT("^[0-9]+(\\.[0-9]+)?$", "大于0的小数，实例1.234"),

	/**
	 * 浮点数 小数，实例1.234
	 */
	NEG_FLOAT("^-?[0-9]+(\\.[0-9]+)?$", "小数，实例1.234"),
	/**
	 * 匹配浮点数 小于0的小数，实例-1.234
	 */
	/**
	 * 匹配HTML标记 <(\S*?)[^>]*>.*?</\1>|<.*? />
	 */
	HTML("^<(\\S*?)[^>]*>.*?</\\1>|<.*? />$", "HTML标记"),
	/**
	 * 匹配身份证 \d{15}|\d{18}
	 */
	IDCARD(
			"(^([1-9][0-9]{7}((0[0-9])|(1[0-2]))(([0|1|2][0-9])|3[0-1])([0-9]{3}|[0-9]{2}[A-Z]))$)|(^[1-9][0-9]{5}[1-9][0-9]{3}((0[0-9])|(1[0-2]))(([0|1|2][0-9])|3[0-1])([0-9]{4}|[0-9]{3}[A-Z])$)",
			"15位或18位数字"),
	/**
	 * 匹配整数 ^-?[1-9]\d*$
	 */
	INT("^-?[0-9]+$", "整型数字"),
	/**
	 * 匹配ip地址 \d+\.\d+\.\d+\.\d+
	 */
	IP(
			"^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$",
			"IP地址，示例：10.10.10.10"),
	/**
	 * 国内手机号码，示例：13800138000
	 */
	MOBILE("^(13[0-9]|15[0-9]|18[0-9]|17[0-9])[0-9]{8}$", "国内手机号码，示例：13800138000"),

	/**
	 * 匹配负整数
	 */
	NEG_INT("^-[0-9]+$", "负整数"),

	/**
	 * 匹配普通文本
	 */
	NORMAL("^[\\s\\S]*$", ""),
	/**
	 * 验证强密码。字符数必须在 6 至 20 的范围内。必须包含大小写字母和数字的组合，不能使用特殊字符
	 */
	PASSWORD("(?=[a-zA-Z0-9]*[a-zA-Z]+)(?=[a-zA-Z0-9]*[0-9]+)^[a-zA-Z0-9]{6,20}$",
			"字符数必须在 6 至 20 的范围内。必须包含大小写字母和数字的组合，不能使用特殊字符。 "),
	/**
	 * 匹配百分数，示例：88.8%
	 */
	PERCENT("[1-9]{0,1}[0-9](\\.[0-9])?%", "百分数，示例：88.8%"),
	/**
	 * 匹配国内电话号码 示例：010-88888888，0755-88888888
	 */
	PHONE("^(([0][0-9]{3}-[0-9]{7,8})|([0][0-9]{2}-[0-9]{8}))$", "固定电话号码，示例：010-88888888，0755-88888888"),
	/**
	 * 匹配正整数 ^[1-9]\d*$
	 */
	POS_INT("^[1-9][0-9]*$", "正整数"),
	/**
	 * 匹配整数,包过0 ^[1-9]\d*$
	 */
	POS_INT_ZERO("^[0-9]+$", "整数"),
	/**
	 * 匹配时间，示例：13:13:00
	 */
	TIME("^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$", "时间，示例：13:13:00"),
	/**
	 * 匹配网址URL 示例：http://www.domain.com
	 */
	URL("^[a-zA-z]+://[^\\s]*$", "示例：http://www.domain.com"),
	/**
	 * 匹配帐号是否合法(字母开头，允许6-20字节，允许字母数字下划线)
	 */
	USERNAME("^[a-zA-Z][a-zA-Z0-9_]{5,19}$", "字母开头，允许6-20字节，允许字母数字下划线"),
	/**
	 * 匹配中国邮政编码 6位数字，示例：518000
	 */
	ZIPCODE("^[1-9][0-9]{5}(?![0-9])$", "6位数字，示例：518000");

	private String hint;

	private String jspattern;

	private String pattern;

	HtmlInputPattern(String pattern, String hint)
	{
		this.jspattern = pattern.replace("\\", "\\\\");
		this.pattern = pattern;
		this.hint = hint;
	}

	public String getHint()
	{
		return hint;
	}

	public String getJspattern()
	{
		return jspattern;
	}

	public String getPattern()
	{
		return pattern;
	}

	public void setHint(String hint)
	{
		this.hint = hint;
	}

	public void setJspattern(String pattern)
	{
		this.jspattern = pattern;
	}

	public void setPattern(String pattern)
	{
		this.pattern = pattern;
	}
}
